#include "doubao_semaphore.h"

// 构造函数实现
Semaphore::Semaphore(int initial_count) : count(initial_count) {}

// P操作实现
void Semaphore::wait() {
    std::unique_lock<std::mutex> lock(mtx);
    // 等待直到count > 0
    cv.wait(lock, [this]() { return count > 0; });
    --count;
}

// V操作实现
void Semaphore::post() {
    std::lock_guard<std::mutex> lock(mtx);
    ++count;
    // 唤醒一个等待的线程
    cv.notify_one();
}

// 尝试获取资源实现
bool Semaphore::try_wait() {
    std::lock_guard<std::mutex> lock(mtx);
    if (count > 0) {
        --count;
        return true;
    }
    return false;
}
